home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d18 / probots.arc / PATROL.PR < prev    next >
Text File  |  1991-04-28  |  2KB  |  83 lines

  1.  
  2. {
  3.   The Southern Patrol
  4.  
  5.  
  6.   Based on a C-Robot by Dave Chess
  7.  
  8.   Strategy: run to the south border, and then run back and forth
  9.      along it, firing at anything that comes into range.
  10.  
  11. }
  12.   PROCEDURE Patrol;
  13.  
  14.   VAR
  15.     course, scandir, Range : Integer;
  16.  
  17.  
  18.     PROCEDURE TURN;
  19.     BEGIN
  20.       { Time to turn? }
  21.       IF ((loc_x < 200) AND (course = 180)) THEN drive(course, 0); {I.E.,Stop}
  22.       IF ((loc_x > 800) AND (course = 0)) THEN drive(course, 0); {I.E.,Stop}
  23.       { Hit anything? }
  24.       IF (speed = 0) THEN
  25.         BEGIN
  26.           course := 180-course;
  27.           drive(course, 100);
  28.         END;
  29.     END; {Turn}
  30.  
  31.  
  32.   BEGIN {Main Patrol}
  33.  
  34.     { Go south, young 'droid! }
  35.     WHILE (loc_y > 5) DO
  36.       BEGIN
  37.         drive(270, 100);
  38.         WHILE (speed > 0) DO cannon(Random(359), 200);
  39.       END;
  40.  
  41.     { Set up for patrol }
  42.     IF (Random(1) = 0)
  43.     THEN course := 0
  44.     ELSE course := 180;
  45.  
  46.     { Patrol forever }
  47.     REPEAT
  48.       { Time to turn? } TURN;
  49.       { Look in various directions }
  50.       Range := scan(4, 4);
  51.       WHILE ((Range > 0) AND (Range < 700)) DO
  52.         BEGIN
  53.           cannon(0, Range);
  54.           Range := scan(4, 4);
  55.           { Time to turn? } TURN;
  56.         END;
  57.       Range := scan(176, 4);
  58.       WHILE ((Range > 0) AND (Range < 700)) DO
  59.         BEGIN
  60.           cannon(180, Range);
  61.           Range := scan(176, 4);
  62.           { Time to turn? } TURN;
  63.         END;
  64.       Range := scan(90, 10);
  65.       WHILE ((Range > 0) AND (Range < 700)) DO
  66.         BEGIN
  67.           cannon(85+Random(10), Range);
  68.           Range := scan(90, 10);
  69.           { Time to turn? } TURN;
  70.         END;
  71.       scandir := Random(160)+10;
  72.       Range := scan(scandir, 10);
  73.       WHILE ((Range > 0) AND (Range < 700)) DO
  74.         BEGIN
  75.           cannon(scandir+Random(10)-5, Range);
  76.           Range := scan(scandir, 10);
  77.           { Time to turn? } TURN;
  78.         END;
  79.  
  80.     UNTIL Dead OR Winner; {REPEAT patrol-forever }
  81.   END; { End Patrol Main }
  82.  
  83.